package Servlet.User;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import Creche.Admin.Administrateur;
import Creche.Bd.BD;
import Creche.Donnees.Actualite;
import Creche.Donnees.Modification;
import Creche.Main.Creche;

@SuppressWarnings("serial")
public class AjoutActu extends HttpServlet {
	

	public void doPost(HttpServletRequest req, HttpServletResponse resp){
		Creche aMod = (Creche) req.getSession().getAttribute("creche");
		Modification modif;
		ArrayList<String> labelNonValide;
		Administrateur admin = (Administrateur) req.getSession().getAttribute("session");
		// nombre de donn�es r�ellement en bd + 1 donn�e
		int nbDonnees;
		if (aMod!=null){
			BD myBase = new BD();
			String label = req.getParameter("label");
			// mise en forme de la date
			String [] val = req.getParameter("valeur").split("/");
			String com = req.getParameter("com")+" ";
			Calendar jour = Calendar.getInstance();
			Calendar date = new GregorianCalendar(Integer.parseInt(val[2]),Integer.parseInt(val[1])-1, Integer.parseInt(val[0]));
			nbDonnees = aMod.getActu().size() + aMod.getSeulementDonnees().size();	
	        long diffMillis = date.getTimeInMillis() - jour.getTimeInMillis();
	        long diffenjours = diffMillis / (24*60*60*1000);
	        long jours = diffenjours+1;
			Actualite ajout = new Actualite(label, com, (int) jours);
			if (jours > 0 && !label.equals("")) {
				if (aMod.notExistA(ajout)) {
					nbDonnees = aMod.getActu().size() + aMod.getSeulementDonnees().size() + 1;
					aMod.addActu(ajout);
				}
				if (admin != null && (admin.getVille().equals(aMod.getAdresse().getVille()) || 
						admin.getVille().equals("super"))) {
					ajout.devientValide();
				} 
		        myBase.estPersistent(aMod);
		        // on va cr�er la modif qui en fait contiendra tout les labels de donn�es non valides
		     	labelNonValide = aMod.getDonneesNonValide();
		     	if(labelNonValide.size() == 0) {
					myBase.removeModif(aMod.getAdresse().getVille() + ":" + aMod.getNom());
				} else {
					modif = new Modification(aMod.getAdresse().getVille() + ":" + aMod.getNom(), 
								labelNonValide);
					myBase.estPersistent(modif);
				}
			}
			//redirection vers la page de modif
	        try {
	        	do {
	        		aMod = myBase.getCreche(aMod.getAdresse().getVille() + ":" +aMod.getNom());
	        	} while(aMod.getActu().size() + aMod.getSeulementDonnees().size() != nbDonnees ); 
				resp.sendRedirect("creche.jsp?nom="+aMod.getNom() + "&ville=" + aMod.getAdresse().getVille());
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} else {
			try {
				resp.sendRedirect("search.jsp");
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}
